package com.hcss.common.util;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * @function : 加密和解密工具
 */
public class EncipherUtil {
	
	private static final BASE64Encoder base64en = new BASE64Encoder();
	
	private static final BASE64Decoder base64De = new BASE64Decoder();
	
	/**
	 * base64加密
	 * @param content
	 * @return
	 */
	public static String base64En(String content){
		byte[] byteContent = content.getBytes();
		
		return base64en.encode(byteContent);
	}
	
	/**
	 * base64解密
	 * @param content
	 * @return
	 * @throws IOException
	 */
	public static byte[] base64De(String content) throws IOException{
		if(EmptyUtil.isHaveEmpty(content)){
			return null;
		}
		
		return base64De.decodeBuffer(content);
	}
	
	/**
	 * MD5加密
	 * @param content
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static String md5(String content) throws NoSuchAlgorithmException{
        byte[] btInput = content.getBytes();
        // 获得MD5摘要算法的 MessageDigest 对象
        MessageDigest mdInst = MessageDigest.getInstance("MD5");
        // 使用指定的字节更新摘要
        mdInst.update(btInput);
        // 获得密文
        byte[] md = mdInst.digest();
        return byteTo16(md);
    }
	public static final char[] hexDigits={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
	
	/**
	 * 字节转换成16进制并以字符串输出
	 * @param md
	 * @return
	 */
	public static String byteTo16(byte[] md){
		// 把密文转换成十六进制的字符串形式
		int j = md.length;
        char[] str= new char[j * 2];
        int k = 0;
        for (int i = 0; i < j; i++) {
            byte byte0 = md[i];
            str[k++] = hexDigits[byte0 >>> 4 & 0xf];
            str[k++] = hexDigits[byte0 & 0xf];
        }
        return new String(str);
	}
	
}
